package com.venutech.gongan.dao;

import com.venutech.gongan.entity.DevicePermission;
import com.venutech.gongan.enums.DevicePermissionStatus;
import org.apache.ibatis.annotations.Param;
import org.springframework.lang.Nullable;

import java.util.List;

public interface DevicePermissionMapper {
    int insert(DevicePermission record);

    int insertSelective(DevicePermission record);

    /**
     * 删除设备权限
     * @param deviceId
     * @param userId
     * @return
     */
    int removeDevicePermission(@Param("deviceId") int deviceId, @Param("userId") int userId);

    /**
     * 根据设备查询设备权限
     * @param deviceId
     * @return
     */
    List<DevicePermission> selectByDeviceId(@Param("deviceId") int deviceId);


    /**
     * 根据设备id和用户id查询
     * @param deviceId 设备id
     * @param userId 用户id
     * @return 满足条件的设备权限
     */
    @Nullable DevicePermission selectByDeviceIdAndUserId(@Param("deviceId") int deviceId, @Param("userId") int userId);

    /**
     * 根据用户查询设备权限
     * @param userId
     * @return
     */
    List<DevicePermission> selectByUserId(@Param("userId") int userId);

    /**
     * 根据设备id删除
     * @param deviceId
     * @return
     */
    int deleteByDeviceId(@Param("deviceId") int deviceId);


    /**
     * 更新申请状态
     * @param deviceId 设备状态
     * @param userId 用户id
     * @param status 状态
     * @return 影响的条目数量
     */
    int updateStatus(@Param("deviceId") int deviceId, @Param("userId") int userId, @Param("status") String status);

    List<DevicePermission> selectAll();

    /**
     * 更新申请状态
     * @param deviceId 设备状态
     * @param userId 用户id
     * @param status 状态
     * @return 影响的条目数量
     */
    default int updateStatus(int deviceId, int userId, DevicePermissionStatus status) {
        return updateStatus(deviceId, userId, status.getStatus());
    }
}